variables.tf 와 *.tfvars 의 차이
안녕하세요. 클래스메소드의 서은우입니다.
테라폼에서는 variables.tf 파일과 *.tfvars 파일을 통해 변수를 선언하고 값을 할당하여 변수를 재사용할 수 있는데요,
이 둘은 어떻게 다른지 그 차이에 대해서 알아보도록 하겠습니다.
variables.tf 파일
variables.tf 파일은 여러 변수의 이름과 값을 정의하는 데 사용됩니다.
테라폼 코드를 작성할 때, 다른 테라폼 파일에서 variables.tf 에 정의된 변수들을 참조하여 재사용할 수 있습니다.
아래의 예시 코드를 보겠습니다.
# variables.tf
# 변수 선언: variable "변수명"
variable "vpc_cidr" {
# 변수에 대한 설명
description = "VPC CIDR block"
# 변수의 타입
type = string
# 변수의 기본 값
default = "192.168.0.0/16"
}
변수를 선언할 때, variable 블록을 사용하여 변수를 선언할 수 있습니다.
- 변수명: variable 키워드 뒤에는 변수명을 지정합니다. 변수명은 고유해야하며 내부에서 변수의 값을 참조할 때 사용할 수 있습니다.
- description: 필요에 따라 변수에 대한 설명을 작성할 수 있습니다.
- type: 해당 변수의 타입을 정의할 수 있습니다. 만약 type 이 정의 되지 않은 경우에는 모든 type의 값을 변수에 할당할 수 있습니다.
- default: 기본으로 사용할 값입니다.
이렇듯 variables.tf 파일 안에 변수의 타입과 기본 값들을 정의해두면 variables.tf 만을 사용하여 테라폼을 배포할 수 있습니다.
하지만 prd, dev와 같이 여러 환경들을 테라폼으로 배포할 때, 대상 환경에 따라 변수의 값들을 다르게 해야한다면 어떻게 해야할까요?
이때 사용할 수 있는 것이 *.tfvars 파일입니다.
*.tfvars 파일
*.tfvars 파일은 실제 변수에 값을 할당하기 위한 것으로 variables.tf 에 선언된 변수를 초기화할 수 있습니다.
예를 들어 아래와 같이 *.tfvars 를 작성하여 각 환경에 따라 다른 변수 값을 할당할 수 있습니다.
# /prd/terraform.tfvars
vpc_cidr = "10.10.0.0/16"
# /dev/terraform.tfvars
vpc_cidr = "172.16.0.0/16"
테라폼은 tfvars 파일을 로딩할 때, terraform.tfvars 파일을 기본적으로 로드하도록 설정되어 있기 때문에 파일명을 terraform 로 tfvars 파일을 생성해주세요.
작성 방법은 "변수명 = 값"으로, variables.tf 에 선언되어 있는 변수만을 대상으로 값을 할당할 수 있습니다.
끝으로
variables.tf과 *.tfvars에 대해서는 아래와 같이 요약할 수 있습니다.
- variables.tf: 변수를 선언하는 파일, 값을 할당할 수도 할당하지 않을 수도 있음.
- *.tfvars: variables.tf에서 변수에 값을 할당하는 파일.
필요한 변수가 많지 않은 경우 variables.tf 한 곳에서 변수를 선언하고 값을 할당하여 테라폼을 배포해도 문제는 없습니다.
하지만 많은 수의 변수를 다뤄야할 경우, *.tfvars 파일도 작성하여 변수의 선언 / 값의 할당을 분리해 둔다면 가독성을 더욱 높일 수 있다고 생각합니다.